const jwt = require("jsonwebtoken")
const jwtScrect = "Gopal_token" //签名
const { CommonErrStatus } = require('./error')
const { RespError } = require('./resp')

//登录接口 生成token的方法
const setToken = function (payload) {
  return new Promise((resolve, reject) => {
    //expiresln 设置token过期的时间
    const token = jwt.sign(
      payload,
      jwtScrect,
      // { expiresIn: "1m" } // 1分钟
      { expiresIn: "24h" } // 24小时

    )
    resolve(token)
  })
}
// 各个接口需要验证token的方法
const getToken = function (token) {
  return new Promise((resolve, reject) => {
    if (!token) {
      reject({
        error: "token是空的",
      })
    } else {
      var info = jwt.verify(token.split(" ")[1], jwtScrect)
      // var info = jwt.verify(token, jwtScrect);
      resolve(info) //解析返回的值（sign 传入的值）
    }
  })
}

// 验证token
const verifyToken = async (ctx, next) => {
  // 获取 JWT 字符串
  const { authorization } = ctx.request.headers
  const token = authorization && authorization.replace('Bearer ', '')
  if (!token) {
    return RespError(ctx, CommonErrStatus.TOKEN_ERR)
  }
  // 验证 JWT
  await jwt.verify(token, jwtScrect, async (err, decoded) => {
    if (err) {
      console.log('验证 JWT==========', err)
      // return err
      return RespError(ctx, CommonErrStatus.TOKEN_ERR)
    } else {
      console.log('验证 JWT==========', decoded)
      ctx.body = decoded
      await next()
    }
  })
}

module.exports = {
  setToken,
  getToken,
  verifyToken
}